/**
 * 按照作者的意思，Option<T>是一个很有用的枚举
 *  Option<T>{
 *    Some(T),
 *    None
 * }
 * 
 * 特殊点在于：
 * 1.定义于标准库中
 * 2.它甚至被包含在了 prelude 之中，你不需要将其显式引入作用域
 * 3.它的成员也是如此，可以不需要 Option:: 前缀来直接使用 Some 和 None
 * 
 * 
 * 有用是怎么体现出来的？
 * 
 * 1.首先Option具有许多方法，比如is_some()、is_none()、unwrap()等
 * 2.Option<T>可以作为函数参数，比如fn some_function(option: Option<i32>)
 * 
 * 
 * 以下是重点（基本上摘抄的）
 * 
 * 
 * 那么当有一个 Option<T> 的值时，如何从 Some 成员中取出 T 的值来使用它呢？
 * Option<T> 枚举拥有大量用于各种情况的方法：
 * 你可以查看它的文档。熟悉 Option<T> 的方法将对你的 Rust 之旅非常有用
 * 
 */

 fn main() {
    let some_number = Some(5); // some_number的类型是Option<i32>
    let score=some_number.unwrap()*20;
    println!("some_number is {}", score);

    let val=Some(String::from(".&###"));
    println!("{:?}",val);

    let some_string = Some("a string"); // some_string的类型是Option<&str>
    let absent_number: Option<i32> = None; // absent_number的类型是Option<i32>
    println!("some_number is {:?}", some_number);
    println!("some_string is {:?}", some_string);
    println!("absent_number is {:?}", absent_number);
    println!("absent_number is {:?}", absent_number.is_none());

    let mut name:String= Default::default();
    name.push_str("abc");

    let message:Option<String>=None;
    message.unwrap();
 }




